// ActionScript file
import classes.Bola;
import classes.XMLFunctions;

import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;

import mx.controls.Alert;
import mx.effects.Move;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.utils.ObjectUtil;

private static const SCREEN_WIDTH:int = 600;
private static const SCREEN_HEIGHT:int = 600;
private var bolas:Array;
private var idJugador: Number;
private var idBola: Number;
private var countBolas: Number;

private var timer: Timer;

private var mostrado:Boolean = false;
private var showTrace:Boolean = true;

public function init():void {
	if(showTrace) trace ("Tamos en Init");
	timer = new Timer(200);
	timer.addEventListener(TimerEvent.TIMER, consultarJuego);
	bolas = new Array();
	fachada.conectar();
}

private function consultarJuego(e:TimerEvent): void {
	fachada.dataJuego();
}

private function moverBola(event:MouseEvent):void {
	if(event.target.hasOwnProperty("id") && event.target.id=="canvas" && idJugador!=-1){
		fachada.coordenadas(idJugador, idBola, event.localX, event.localY);
	} 
}

private function clickBola(event:MouseEvent):void {
	if(event.currentTarget.hasOwnProperty("name") && event.currentTarget.name == "bola"){
		idBola = new Number(event.currentTarget.id);
		if(showTrace) trace("Bola seleccionada " + idBola);
	}
}

private function conectarOk(_ev:ResultEvent): void {
	//idBola = new Number(_ev.result.toString());
	var data:Array = XMLFunctions.parseXML(_ev.result.toString())["conectarReturn"];
	idJugador = new Number(data[0]);
	if(showTrace) trace("Me asignaron el número " + idJugador);
	if (idJugador < 0) {
		Alert.show("Se alcanzó el máximo de jugadores conectados, pero puede ver el juego", "Error");
	} else {
		idBola = new Number(data[1]);
		if(showTrace) trace("Me asignaron id bola " + idBola);
		countBolas = new Number(data[2]);
		var isNotEnemigo:Boolean;
		var r:int = 0; 
		for (var i:int = 0; i <= idBola; i++) {
			if(showTrace) trace ("Iterando> :" + i);
			isNotEnemigo = ( i==idBola || ( 0 < idBola - i &&  idBola - i < countBolas));
			bolas.push(new Bola(canvas, isNotEnemigo? "img/bola.png" : "img/enemigo.png", isNotEnemigo? r++ : 0, isNotEnemigo? "bola" : "enemigo", this.clickBola));
		}
		idBola = 0;
		
	}
	timer.start();
}

private function conectarNok(_ev:FaultEvent): void {
	if(showTrace) trace("Error de conexión en conectar");
}

private function coordenadasOk(_ev:ResultEvent): void {
	if(showTrace) trace("Las coordenadas se enviaron bien");
}

private function coordenadasNok(_ev:FaultEvent): void {
	if(showTrace) trace("Error de conexión en coordenadas");
}

private function dataJuegoNok(_ev:FaultEvent): void {
	if(showTrace) trace("Error de conexión en dataJuego");
}

private function dataJuegoOk(_ev:ResultEvent): void {
	var data:Object = XMLFunctions.parseXML(_ev.result.toString())["dataJuegoReturn"];
	var count:Number = data.bolasCount;
	
	var i:int;
	if (count > bolas.length) {
		for (i = bolas.length; i < count; i++) {
			bolas[i] = new Bola(canvas, "img/enemigo.png");
		}
	}
	var bolasData:Object;
	var id:Number;
	var x:Number;
	var y:Number;
	var a:String;
	if (data.bolasData.hasOwnProperty("bolasData")) { 
		bolasData = data.bolasData.bolasData;
		for (a in bolasData) {
			id = new Number(bolasData[a].id);
			x = new Number(bolasData[a].x);
			y = new Number(bolasData[a].y);
			if (x != bolas[id].getX() || y != bolas[id].getY()) {
				bolas[id].moveTo(x, y);
			}	
		}
	} else {
		bolasData = XMLFunctions.parseXML( data.bolasData.toString())["bolasData"];
		id = new Number(bolasData.id);
		x = new Number(bolasData.x);
		y = new Number(bolasData.y);
		if (x != bolas[id].getX() || y != bolas[id].getY()) {
			bolas[id].moveTo(x, y);
		}	
	}
	
}